Exemples sur Indicateurs de prix¶
In [1]:
Copied!
import requests
import plotly.io as pio
import plotly.graph_objects as go
from plotly.subplots import make_subplots
import folium
import branca
from apifoncier import ApiFoncierClient
pio.renderers.default = "notebook"
import requests
import plotly.io as pio
import plotly.graph_objects as go
from plotly.subplots import make_subplots
import folium
import branca
from apifoncier import ApiFoncierClient
pio.renderers.default = "notebook"
Evolution des prix et des volumes de transactions¶
In [2]:
Copied!
client = ApiFoncierClient({"progress_bar": False})
df = client.indicateurs.prix(codes="59646", echelle="communes")
fig = make_subplots(specs=[[{"secondary_y": True}]])
palette = ["indianred", "lightsalmon"]
# Ajout des barres de nombre de transaction
fig.add_trace(
go.Bar(
x=df["annee"],
y=df["nbtrans_cod1113"],
name="Maisons anciennes",
marker_color=palette[0],
opacity=0.7,
),
secondary_y=False,
)
fig.add_trace(
go.Bar(
x=df["annee"],
y=df["nbtrans_cod1213"],
name="Appartements anciens",
marker_color=palette[1],
opacity=0.7,
),
secondary_y=False,
)
# Ajout des courbes de prix médian
fig.add_trace(
go.Scatter(
x=df["annee"],
y=df["pxm2_median_cod1113"],
mode="lines",
name="Maisons anciennes",
line=dict(color=palette[0]),
),
secondary_y=True,
)
fig.add_trace(
go.Scatter(
x=df["annee"],
y=df["pxm2_median_cod1213"],
mode="lines",
name="Appartements anciens",
line=dict(color=palette[1]),
),
secondary_y=True,
)
# Mise à jour de la mise en page du graphique
fig.update_layout(
title="Évolution annuelle des prix médian et du nombre de transaction (Wasquehal)",
xaxis_title="Année",
yaxis_title="Nombre de ventes",
yaxis2=dict(title="Prix médian au m2", overlaying="y", side="right"),
)
fig.show()
client = ApiFoncierClient({"progress_bar": False})
df = client.indicateurs.prix(codes="59646", echelle="communes")
fig = make_subplots(specs=[[{"secondary_y": True}]])
palette = ["indianred", "lightsalmon"]
# Ajout des barres de nombre de transaction
fig.add_trace(
go.Bar(
x=df["annee"],
y=df["nbtrans_cod1113"],
name="Maisons anciennes",
marker_color=palette[0],
opacity=0.7,
),
secondary_y=False,
)
fig.add_trace(
go.Bar(
x=df["annee"],
y=df["nbtrans_cod1213"],
name="Appartements anciens",
marker_color=palette[1],
opacity=0.7,
),
secondary_y=False,
)
# Ajout des courbes de prix médian
fig.add_trace(
go.Scatter(
x=df["annee"],
y=df["pxm2_median_cod1113"],
mode="lines",
name="Maisons anciennes",
line=dict(color=palette[0]),
),
secondary_y=True,
)
fig.add_trace(
go.Scatter(
x=df["annee"],
y=df["pxm2_median_cod1213"],
mode="lines",
name="Appartements anciens",
line=dict(color=palette[1]),
),
secondary_y=True,
)
# Mise à jour de la mise en page du graphique
fig.update_layout(
title="Évolution annuelle des prix médian et du nombre de transaction (Wasquehal)",
xaxis_title="Année",
yaxis_title="Nombre de ventes",
yaxis2=dict(title="Prix médian au m2", overlaying="y", side="right"),
)
fig.show()
Carte communale à l'échelle d'un EPCI¶
In [8]:
Copied!
# On définit l'EPCI et on récupère les contours des communes qui la compose
EPCI = "245900758"
communes = requests.get(
f"https://geo.api.gouv.fr/epcis/{EPCI}/communes/?format=geojson&geometry=contour"
).json()
# On choisit un indicateur de prix
indicateur, titre = "valeurfonc_median_mmx", "Maisons - surface entre 90 et 130 m2 "
mini, maxi = 99999999, 0
# Ajout de l'indicateur pour chaque contour de communes
for i, comm in enumerate(communes["features"]):
code = comm["properties"]["code"]
nom = comm["properties"]["nom"]
print(nom, str(i + 1) + "/" + str(len(communes["features"])))
response = client.indicateurs.prix(
codes=code, echelle="communes", type_prix="triennal", annee="2019"
)
if not response.empty:
value = response[indicateur].values[0] or 0
comm["properties"][indicateur] = value
if value > 0:
if value < mini:
mini = value
if value > maxi:
maxi = value
# Génération de la carte
colorscale = branca.colormap.linear.YlOrRd_09.scale(mini, maxi)
colorscale.caption = "Prix médian (€) communal entre 2019 et 2021"
def style_function(feature):
value = feature["properties"][indicateur]
return {
"fillOpacity": 0.8,
"weight": 1,
"fillColor": colorscale(int(value)) if value > 0 else "lightgray",
"color": "darkgray",
}
m = folium.Map(location=[50.65, 2.74], zoom_start=11)
folium.GeoJson(
communes,
name=titre,
style_function=style_function,
popup=folium.GeoJsonPopup(
fields=["nom", indicateur], aliases=["nom", "Prix median"]
),
).add_to(m)
colorscale.add_to(m)
m
# On définit l'EPCI et on récupère les contours des communes qui la compose
EPCI = "245900758"
communes = requests.get(
f"https://geo.api.gouv.fr/epcis/{EPCI}/communes/?format=geojson&geometry=contour"
).json()
# On choisit un indicateur de prix
indicateur, titre = "valeurfonc_median_mmx", "Maisons - surface entre 90 et 130 m2 "
mini, maxi = 99999999, 0
# Ajout de l'indicateur pour chaque contour de communes
for i, comm in enumerate(communes["features"]):
code = comm["properties"]["code"]
nom = comm["properties"]["nom"]
print(nom, str(i + 1) + "/" + str(len(communes["features"])))
response = client.indicateurs.prix(
codes=code, echelle="communes", type_prix="triennal", annee="2019"
)
if not response.empty:
value = response[indicateur].values[0] or 0
comm["properties"][indicateur] = value
if value > 0:
if value < mini:
mini = value
if value > maxi:
maxi = value
# Génération de la carte
colorscale = branca.colormap.linear.YlOrRd_09.scale(mini, maxi)
colorscale.caption = "Prix médian (€) communal entre 2019 et 2021"
def style_function(feature):
value = feature["properties"][indicateur]
return {
"fillOpacity": 0.8,
"weight": 1,
"fillColor": colorscale(int(value)) if value > 0 else "lightgray",
"color": "darkgray",
}
m = folium.Map(location=[50.65, 2.74], zoom_start=11)
folium.GeoJson(
communes,
name=titre,
style_function=style_function,
popup=folium.GeoJsonPopup(
fields=["nom", indicateur], aliases=["nom", "Prix median"]
),
).add_to(m)
colorscale.add_to(m)
m
Estaires 1/8 La Gorgue 2/8 Haverskerque 3/8 Merville 4/8 Fleurbaix 5/8 Laventie 6/8 Lestrem 7/8 Sailly-sur-la-Lys 8/8
Out[8]:
Make this Notebook Trusted to load map: File -> Trust Notebook